{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基于 DQAS 算法的 MNIST 手写数字二分类问题\n",
    "\n",
    "完成人: 杨建飞 2024.11.26\n",
    "\n",
    "## 开源实习任务介绍\n",
    "\n",
    "量子线路的不同设计方式会严重影响到量子变分算法、量子神经网络等应用的效果，受到经典神经网络设计的启发，量子线路的自适应选取有望提高量子算法的效率和精度，本任务旨在构建一套量子线路结构搜索框架，可以自适应地完成量子线路设计并提高结果精度。需要设计一套自适应的程序框架，在给定量子门集合中自动选取最优的组合来实现目标量子算法。  \n",
    "要求基于 MindQuantum==0.9 框架，实现 mnist 数据集识别准确度比文献“https://doi.org/10.1016/j.neunet.2023.09.040”更高\n",
    "\n",
    "## DQAS 算法介绍\n",
    "\n",
    "[DQAS 算法[1]](https://arxiv.org/abs/2010.08561)是一种基于可微量子结构搜索的算法,将 Ansatz 的搜索过程分为了两个目标：结构搜索和参数搜索，并且在算法中进行同时优化，是一种双优化算法。首先需要预定义的是两个部分：**算符池(Operator Pool)**和**共享参数池(Shared Parameter Pool)**。算符池中存储的是预定义量子门，共享参数池中存储的是量子门参数。\n",
    "\n",
    "### 算符池(Operator Pool)\n",
    "\n",
    "算符池中是预定义的量子线路片段，被称为“算符(Operator)”. 请注意算符可能是参数化的，也可能不是参数化的。在本项目中的预定义算符池成员如下：\n",
    "\n",
    "1. Rx(θ1)Ry(θ2)Rz(θ3)门\n",
    "2. CNOT 门\n",
    "\n",
    "需注意作用在不同的量子比特上可以视为不同的算符，因此当量子比特数目增加时，设计算符池存在困难。在本项目的实践过程中，采用了一种更加具有拓展性的算符池设计方式,被称为[Micro Search](https://proceedings.mlr.press/v202/wu23v/wu23v.pdf)，其核心思想是，只设计一个子线路(Sub Circuit),通过重复这个子线路的结构能够拼成一个完整线路。(仅仅是结构重复，变分参数并不相同)，示意图如下:  \n",
    "![图片alt](./asset/MicroSearch.png)\n",
    "\n",
    "### 共享参数池(Shared Parameter Pool)\n",
    "\n",
    "共享参数池中存储的是量子门参数，这些参数是共享的，也就是每次生成的 Ansatz 会直接从共享参数池中的对应位置直接获取一个参数作为变分参数(这当然不是最优参数),绑定好后再进行损失值的测定。最后将会根据 loss 测定带来的梯度，更新对应参数池对应位置的参数。  \n",
    "尽管共享参数池的概念，不完全符合 VQA 算法找寻最优变分参数的惯例，但这样的设计方案大大降低了算法的运行时间和复杂度。到了后期共享参数池不断地被更新，且候选结构相对固定，便会接近有固定 ansatz 结构的 VQA 算法。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理部分\n",
    "\n",
    "在本项目中对 MNIST 手写数字数据集中的\"3\"和\"6\"图片进行了 PCA 降维到 8 维, 同时将降维数据映射到[0,π]区间，并进行了归一化处理。  \n",
    "在量子线路中的 Data Encoding 部分,采用了 PCA 数据+角度编码(8 量子比特)的方式完成。\n",
    "此外，需要格外关注的一点是,MNIST 手写数据集中\"3\"和\"6\"的个数总数为 11446, 而 DQAS 只抽样使用了其中的 10%，后续微调过程则在完整的数据集上实现。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install -r requirements.txt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torchvision import datasets\n",
    "from data_preprocessing import pca_data_preprocessing\n",
    "\n",
    "mnist_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=None)\n",
    "# 载入预处理、采样 10% 过后的的二分类认为训练和测试数据集\n",
    "x_train, x_test, y_train, y_test = pca_data_preprocessing(mnist_dataset, 8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/miniconda3/envs/MindSpore/lib/python3.9/site-packages/mindquantum/simulator/__init__.py:17: UserWarning: Unable import mqvector gpu backend due to: cannot import name '_mq_vector_gpu' from partially initialized module 'mindquantum' (most likely due to a circular import) (/opt/miniconda3/envs/MindSpore/lib/python3.9/site-packages/mindquantum/__init__.py)\n",
      "  from .available_simulator import SUPPORTED_SIMULATOR\n",
      "Please first ``pip install -U qiskit`` to enable related functionality in translation module\n"
     ]
    }
   ],
   "source": [
    "from mindquantum.core.parameterresolver import PRGenerator\n",
    "import numpy as np\n",
    "from mindquantum.core.gates import RX, RY, RZ, X, I\n",
    "from mindquantum.core.circuit import UN\n",
    "import mindspore as ms\n",
    "from mindquantum.core.parameterresolver import PRGenerator\n",
    "from mindspore import ops\n",
    "import tensorcircuit as tc\n",
    "import tensorflow as tf\n",
    "\n",
    "pr_pool = PRGenerator('pool')\n",
    "\n",
    "# 定义参数化算符池 加入I门填充空余比特 是为了方便后续操作\n",
    "parameterized_circuit = [\n",
    "    UN(RX(pr_pool.new()), maps_obj=[0])\n",
    "    + UN(RY(pr_pool.new()), maps_obj=[0])\n",
    "    + UN(RZ(pr_pool.new()), maps_obj=[0])\n",
    "    + I.on(1),\n",
    "    UN(RX(pr_pool.new()), maps_obj=[1])\n",
    "    + UN(RY(pr_pool.new()), maps_obj=[1])\n",
    "    + UN(RZ(pr_pool.new()), maps_obj=[1])\n",
    "    + I.on(0),\n",
    "]\n",
    "\n",
    "# 定义非参数化算符池\n",
    "unparameterized_circuit = [\n",
    "    UN(X, maps_obj=[0], maps_ctrl=[1]),\n",
    "    UN(X, maps_obj=[1], maps_ctrl=[0]),\n",
    "]\n",
    "ansatz_pr = PRGenerator('ansatz')\n",
    "shape_parametized = len(parameterized_circuit)\n",
    "shape_unparameterized = len(unparameterized_circuit)\n",
    "\n",
    "# 设定具体的微观搜索中子线路的结构占位符个数\n",
    "num_layer = 4\n",
    "shape_nnp = (7, num_layer, shape_parametized, 3)  # 定义共享参数池的尺寸\n",
    "shape_stp = (num_layer, shape_unparameterized + shape_parametized)  # 定义结构参数的初始尺寸\n",
    "stddev = 0.03\n",
    "np.random.seed(2)\n",
    "nnp = np.random.normal(loc=0.0, scale=stddev, size=shape_nnp)  # 生成随机分布的共享参数池\n",
    "stp = np.random.normal(loc=0.0, scale=stddev, size=shape_stp)  # 生成随机分布的结构参数\n",
    "ops_onehot = ops.OneHot(axis=-1)  # 定义onehot编码算子"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 算符池的具体定义\n",
    "\n",
    "查看算符池的各个成员\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"396.8\" height=\"140.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"396.8\" height=\"140.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"376.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"376.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"112.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool0 </text><rect x=\"172.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"212.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool1 </text><rect x=\"272.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"312.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool2 </text><rect x=\"72.8\" y=\"80.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"92.8\" y=\"100.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x175627130>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"396.8\" height=\"140.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"396.8\" height=\"140.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"376.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"376.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"112.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool3 </text><rect x=\"172.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"212.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"212.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool4 </text><rect x=\"272.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"312.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"312.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >pool5 </text><rect x=\"72.8\" y=\"20.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"92.8\" y=\"40.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x10795d940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"156.8\" height=\"128.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"156.8\" height=\"128.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"136.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"136.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><circle cx=\"92.8\" cy=\"100.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"72.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"78.8\" x2=\"106.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x10795d940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"156.8\" height=\"128.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"12.0\" width=\"156.8\" height=\"128.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><line x1=\"48.8\" x2=\"136.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"136.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><circle cx=\"92.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"72.8\" y=\"80.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"78.8\" x2=\"106.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"92.8\" x2=\"92.8\" y1=\"86.0\" y2=\"114.0\" stroke=\"#ffffff\" stroke-width=\"4\" /></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x338e89f70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for each_op in parameterized_circuit:\n",
    "    display(each_op.svg())\n",
    "for each_op in unparameterized_circuit:\n",
    "    display(each_op.svg())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始进行DQAS算法的迭代"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------epoch 0-----------\n",
      "batched平均损失:  0.89857846\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 1-----------\n",
      "batched平均损失:  0.8150909\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 2-----------\n",
      "batched平均损失:  0.7842525\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 3-----------\n",
      "batched平均损失:  0.77199715\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 4-----------\n",
      "batched平均损失:  0.7360642\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 5-----------\n",
      "batched平均损失:  0.70016533\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 6-----------\n",
      "batched平均损失:  0.7059648\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 7-----------\n",
      "batched平均损失:  0.69714254\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 8-----------\n",
      "batched平均损失:  0.65290815\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 9-----------\n",
      "batched平均损失:  0.6651093\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 10-----------\n",
      "batched平均损失:  0.62112176\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 11-----------\n",
      "batched平均损失:  0.64050263\n",
      "最好的候选结构: [2 2 3 3]\n",
      "----------epoch 12-----------\n",
      "batched平均损失:  0.6634721\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =64.797507788162% \n",
      "----------epoch 13-----------\n",
      "batched平均损失:  0.6306405\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =67.39356178608516% \n",
      "----------epoch 14-----------\n",
      "batched平均损失:  0.6677131\n",
      "最好的候选结构: [2 2 3 0]\n",
      "二分类准确率 Acc =68.32814122533749% \n"
     ]
    }
   ],
   "source": [
    "from dqas_tool import (\n",
    "    sampling_from_structure,\n",
    "    vag_nnp_micro_minipool,\n",
    "    best_from_structure,\n",
    "    zeroslike_grad_nnp_micro_minipool,\n",
    "    nmf_gradient,\n",
    "    dqas_accuracy_custom,\n",
    "    mindspore_ansatz_micro_minipool,\n",
    "    nnp_dealwith,\n",
    ")\n",
    "\n",
    "K = tc.set_backend(\"tensorflow\")\n",
    "lr = tf.keras.optimizers.schedules.ExponentialDecay(0.06, 100, 0.5)\n",
    "structure_opt = tc.backend.optimizer(tf.keras.optimizers.Adam(0.1))\n",
    "network_opt = tc.backend.optimizer(tf.keras.optimizers.Adam(lr))\n",
    "verbose = False\n",
    "# 设置超参数\n",
    "epochs = 15\n",
    "batch_size = 100\n",
    "avcost1 = 0\n",
    "ops_onehot = ops.OneHot(axis=-1)\n",
    "batch_loss_history = []  # 记录每个epoch的batch_size损失值\n",
    "structure_distribution_history = []  # 记录每个epoch的结构参数\n",
    "ansatz_params_history = []  # 记录每个epoch的网络参数\n",
    "best_candidates_history = []  # 记录每个epoch的最佳候选\n",
    "acc_history = []  # 记录每个epoch的准确率\n",
    "\n",
    "\n",
    "for epoch in range(epochs):  # 更新结构参数的迭代\n",
    "    avcost2 = avcost1\n",
    "    costl = []\n",
    "    tmp = np.stack([sampling_from_structure(stp, num_layer, shape_parametized) for _ in range(batch_size)])\n",
    "    batch_structure = ops_onehot(ms.Tensor(tmp), shape_parametized + shape_unparameterized, ms.Tensor(1), ms.Tensor(0))\n",
    "    # print(batch_structure.shape)\n",
    "    # print(tmp,batch_structure)\n",
    "    loss_value = []\n",
    "    grad_nnps = []\n",
    "    grad_stps = []\n",
    "\n",
    "    for i in batch_structure:\n",
    "        # print(ops.Argmax()(i))\n",
    "        infd, grad_nnp = vag_nnp_micro_minipool(\n",
    "            structure_params=i,\n",
    "            ansatz_params=nnp,\n",
    "            paramerterized_pool=parameterized_circuit,\n",
    "            unparamerterized_pool=unparameterized_circuit,\n",
    "            num_layer=num_layer,\n",
    "            n_qbits=8,\n",
    "        )(ms.Tensor(x_train), ms.Tensor(y_train))\n",
    "\n",
    "        grad_nnp_zeroslike = zeroslike_grad_nnp_micro_minipool(\n",
    "            batch_sturcture=i, grad_nnp=grad_nnp[0], shape_parametized=shape_parametized, ansatz_parameters=nnp\n",
    "        )\n",
    "        gs = nmf_gradient(structures=stp, oh=i, num_layer=num_layer, size_pool=stp.shape[1])\n",
    "        # print(infd,grad_nnp)\n",
    "        loss_value.append(infd)\n",
    "        grad_nnps.append(ms.Tensor(grad_nnp_zeroslike, dtype=ms.float64))\n",
    "        grad_stps.append(gs)\n",
    "\n",
    "    infd = ops.stack(loss_value)\n",
    "    gnnp = ops.addn(grad_nnps)\n",
    "    gstp = [(infd[i] - avcost2) * grad_stps[i] for i in range(infd.shape[0])]\n",
    "    gstp_averge = ops.addn(gstp) / infd.shape[0]\n",
    "    avcost1 = sum(infd) / infd.shape[0]\n",
    "    # print(f'loss={infd}\\ngrad_nnp={gnnp}\\ngrandient_stp={gstp_averge}')\n",
    "\n",
    "    gnnp_tf = tf.convert_to_tensor(gnnp.asnumpy(), dtype=tf.float64)\n",
    "    nnp_tf = tf.convert_to_tensor(nnp, dtype=tf.float64)\n",
    "    gstp_averge_tf = tf.convert_to_tensor(gstp_averge.reshape(stp.shape).asnumpy(), dtype=tf.float64)\n",
    "    stp_tf = tf.convert_to_tensor(stp, dtype=tf.float64)\n",
    "    # 更新一步参数\n",
    "    nnp_tf = network_opt.update(gnnp_tf, nnp_tf)\n",
    "    stp_tf = structure_opt.update(gstp_averge_tf, stp_tf)\n",
    "\n",
    "    nnp = nnp_tf.numpy()\n",
    "    stp = stp_tf.numpy()\n",
    "\n",
    "    batch_loss_history.append(avcost1)\n",
    "    structure_distribution_history.append(stp)\n",
    "    ansatz_params_history.append(nnp)\n",
    "    # best_candidates_history.append(best_from_structure(cand_preset.asnumpy()))\n",
    "    cand_preset = best_from_structure(stp)\n",
    "    best_candidates_history.append(cand_preset.asnumpy())\n",
    "\n",
    "    if epoch % 1 == 0 or epoch == epochs - 1:\n",
    "        print(\"----------epoch %s-----------\" % epoch)\n",
    "        print(\n",
    "            \"batched平均损失: \",\n",
    "            avcost1,\n",
    "        )\n",
    "\n",
    "        if verbose:\n",
    "            print(\n",
    "                \"structure parameter: \\n\",\n",
    "                stp,\n",
    "                \"\\n network parameter: \\n\",\n",
    "                nnp,\n",
    "            )\n",
    "\n",
    "        print(\"最好的候选结构:\", cand_preset)\n",
    "        stp_for_test = ops_onehot(\n",
    "            ms.Tensor(cand_preset), shape_parametized + shape_unparameterized, ms.Tensor(1), ms.Tensor(0)\n",
    "        )\n",
    "\n",
    "        if cand_preset.min() < shape_parametized:\n",
    "            ansatz_parameters = nnp_dealwith(structure_params=stp_for_test, network_params=nnp)\n",
    "            test_ansatz = mindspore_ansatz_micro_minipool(\n",
    "                structure_p=stp_for_test,\n",
    "                parameterized_pool=parameterized_circuit,\n",
    "                unparameterized_pool=unparameterized_circuit,\n",
    "                num_layer=num_layer,\n",
    "                n_qbits=8,\n",
    "            )\n",
    "            acc = dqas_accuracy_custom(\n",
    "                ansatz=test_ansatz, network_params=ansatz_parameters, x=x_train, y=y_train, n_qbits=8\n",
    "            )\n",
    "            acc_history.append(acc)\n",
    "            print(f'二分类准确率 Acc ={acc*100}% ')\n",
    "\n",
    "        # 我想每一轮结束 保存batch_loss_history、structure_distribution_history、ansatz_params_history、best_candidates_history、acc_history\n",
    "        # 保存数据\n",
    "        np.savez(\n",
    "            'training_history-minipool-k4.npz',\n",
    "            batch_loss_history=batch_loss_history,\n",
    "            structure_distribution_history=structure_distribution_history,\n",
    "            ansatz_params_history=ansatz_params_history,\n",
    "            best_candidates_history=best_candidates_history,\n",
    "            acc_history=acc_history,\n",
    "        )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "目前已经可以得到了最终的 Ansatz,[1,1,3,0],其对应的量子线路如下：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载\n",
    "data = np.load('training_history-minipool-k4.npz', allow_pickle=True)\n",
    "batch_loss_history = data['batch_loss_history']\n",
    "structure_distribution_history = data['structure_distribution_history']\n",
    "ansatz_params_history = data['ansatz_params_history']\n",
    "best_candidates_history = data['best_candidates_history']\n",
    "acc_history = data['acc_history']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1636.8\" height=\"500.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><rect x=\"0\" y=\"0.0\" width=\"1636.8\" height=\"500.0\" fill=\"#ffffff\" /><text x=\"20.0\" y=\"40.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q0: </text><text x=\"20.0\" y=\"100.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q1: </text><text x=\"20.0\" y=\"160.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q2: </text><text x=\"20.0\" y=\"220.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q3: </text><text x=\"20.0\" y=\"280.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q4: </text><text x=\"20.0\" y=\"340.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q5: </text><text x=\"20.0\" y=\"400.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q6: </text><text x=\"20.0\" y=\"460.0\" font-size=\"16px\" dominant-baseline=\"middle\" text-anchor=\"start\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#252b3a\" >q7: </text><line x1=\"48.8\" x2=\"1616.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"220.0\" y2=\"220.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"340.0\" y2=\"340.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><line x1=\"48.8\" x2=\"1616.8\" y1=\"460.0\" y2=\"460.0\" stroke=\"#adb0b8\" stroke-width=\"1\" /><rect x=\"72.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder0 </text><rect x=\"72.8\" y=\"80.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"96.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"112.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder1 </text><rect x=\"72.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder2 </text><rect x=\"72.8\" y=\"200.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"216.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"232.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder3 </text><rect x=\"72.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder4 </text><rect x=\"72.8\" y=\"320.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"336.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"352.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder5 </text><rect x=\"72.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder6 </text><rect x=\"72.8\" y=\"440.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"112.8\" y=\"456.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"112.8\" y=\"472.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >encoder7 </text><circle cx=\"192.8\" cy=\"100.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"172.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"178.8\" x2=\"206.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"252.8\" cy=\"100.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"232.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"238.8\" x2=\"266.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"312.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"40.0\" y2=\"100.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"292.8\" y=\"80.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"298.8\" x2=\"326.8\" y1=\"100.0\" y2=\"100.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"86.0\" y2=\"114.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"352.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"392.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"392.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz0 </text><rect x=\"452.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"492.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"492.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz1 </text><rect x=\"552.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"592.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"592.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz2 </text><rect x=\"352.8\" y=\"80.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"372.8\" y=\"100.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"192.8\" cy=\"220.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"160.0\" y2=\"220.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"172.8\" y=\"140.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"178.8\" x2=\"206.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"146.0\" y2=\"174.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"252.8\" cy=\"220.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"160.0\" y2=\"220.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"232.8\" y=\"140.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"238.8\" x2=\"266.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"146.0\" y2=\"174.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"312.8\" cy=\"160.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"160.0\" y2=\"220.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"292.8\" y=\"200.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"298.8\" x2=\"326.8\" y1=\"220.0\" y2=\"220.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"206.0\" y2=\"234.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"352.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"392.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"392.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz3 </text><rect x=\"452.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"492.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"492.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz4 </text><rect x=\"552.8\" y=\"140.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"592.8\" y=\"156.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"592.8\" y=\"172.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz5 </text><rect x=\"352.8\" y=\"200.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"372.8\" y=\"220.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"192.8\" cy=\"340.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"280.0\" y2=\"340.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"172.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"178.8\" x2=\"206.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"252.8\" cy=\"340.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"280.0\" y2=\"340.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"232.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"238.8\" x2=\"266.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"312.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"280.0\" y2=\"340.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"292.8\" y=\"320.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"298.8\" x2=\"326.8\" y1=\"340.0\" y2=\"340.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"326.0\" y2=\"354.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"352.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"392.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"392.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz6 </text><rect x=\"452.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"492.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"492.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz7 </text><rect x=\"552.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"592.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"592.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz8 </text><rect x=\"352.8\" y=\"320.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"372.8\" y=\"340.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"192.8\" cy=\"460.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"400.0\" y2=\"460.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"172.8\" y=\"380.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"178.8\" x2=\"206.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"192.8\" x2=\"192.8\" y1=\"386.0\" y2=\"414.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"252.8\" cy=\"460.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"400.0\" y2=\"460.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"232.8\" y=\"380.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"238.8\" x2=\"266.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"252.8\" x2=\"252.8\" y1=\"386.0\" y2=\"414.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"312.8\" cy=\"400.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"400.0\" y2=\"460.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"292.8\" y=\"440.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"298.8\" x2=\"326.8\" y1=\"460.0\" y2=\"460.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"312.8\" x2=\"312.8\" y1=\"446.0\" y2=\"474.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"352.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"392.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"392.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz9 </text><rect x=\"452.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"492.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"492.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz10 </text><rect x=\"552.8\" y=\"380.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"592.8\" y=\"396.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"592.8\" y=\"412.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz11 </text><rect x=\"352.8\" y=\"440.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"372.8\" y=\"460.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"672.8\" cy=\"160.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"672.8\" x2=\"672.8\" y1=\"40.0\" y2=\"160.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"652.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"658.8\" x2=\"686.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"672.8\" x2=\"672.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"732.8\" cy=\"160.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"732.8\" x2=\"732.8\" y1=\"40.0\" y2=\"160.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"712.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"718.8\" x2=\"746.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"732.8\" x2=\"732.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"792.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"40.0\" y2=\"160.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"140.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"160.0\" y2=\"160.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"146.0\" y2=\"174.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz12 </text><rect x=\"932.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz13 </text><rect x=\"1032.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz14 </text><rect x=\"832.8\" y=\"140.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"160.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"672.8\" cy=\"400.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"672.8\" x2=\"672.8\" y1=\"280.0\" y2=\"400.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"652.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"658.8\" x2=\"686.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"672.8\" x2=\"672.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"732.8\" cy=\"400.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"732.8\" x2=\"732.8\" y1=\"280.0\" y2=\"400.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"712.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"718.8\" x2=\"746.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"732.8\" x2=\"732.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"792.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"280.0\" y2=\"400.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"772.8\" y=\"380.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"778.8\" x2=\"806.8\" y1=\"400.0\" y2=\"400.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"792.8\" x2=\"792.8\" y1=\"386.0\" y2=\"414.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"832.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"872.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"872.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz15 </text><rect x=\"932.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"972.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"972.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz16 </text><rect x=\"1032.8\" y=\"260.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1072.8\" y=\"276.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1072.8\" y=\"292.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz17 </text><rect x=\"832.8\" y=\"380.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"852.8\" y=\"400.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text><circle cx=\"1152.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"1152.8\" x2=\"1152.8\" y1=\"40.0\" y2=\"280.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"1132.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"1138.8\" x2=\"1166.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"1152.8\" x2=\"1152.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"1212.8\" cy=\"280.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"1212.8\" x2=\"1212.8\" y1=\"40.0\" y2=\"280.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"1192.8\" y=\"20.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"1198.8\" x2=\"1226.8\" y1=\"40.0\" y2=\"40.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"1212.8\" x2=\"1212.8\" y1=\"26.0\" y2=\"54.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><circle cx=\"1272.8\" cy=\"40.0\" r=\"4\" fill=\"#16acff\" /><line x1=\"1272.8\" x2=\"1272.8\" y1=\"40.0\" y2=\"280.0\" stroke=\"#16acff\" stroke-width=\"3\" /><rect x=\"1252.8\" y=\"260.0\" width=\"40\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#16acff\" fill-opacity=\"1\" /><line x1=\"1258.8\" x2=\"1286.8\" y1=\"280.0\" y2=\"280.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><line x1=\"1272.8\" x2=\"1272.8\" y1=\"266.0\" y2=\"294.0\" stroke=\"#ffffff\" stroke-width=\"4\" /><rect x=\"1312.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1352.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RX </text><text x=\"1352.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz18 </text><rect x=\"1412.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1452.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RY </text><text x=\"1452.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz19 </text><rect x=\"1512.8\" y=\"20.0\" width=\"80.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#fac209\" fill-opacity=\"1\" /><text x=\"1552.8\" y=\"36.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >RZ </text><text x=\"1552.8\" y=\"52.0\" font-size=\"14.0px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >ansatz20 </text><rect x=\"1312.8\" y=\"260.0\" width=\"40.0\" height=\"40\" rx=\"4\" ry=\"4\" stroke=\"#ffffff\" stroke-width=\"0\" fill=\"#5e7ce0\" fill-opacity=\"1\" /><text x=\"1332.8\" y=\"280.0\" font-size=\"20px\" dominant-baseline=\"middle\" text-anchor=\"middle\" font-family=\"Arial\" font-weight=\"normal\" fill=\"#ffffff\" >I </text></svg>"
      ],
      "text/plain": [
       "<mindquantum.io.display.circuit_svg_drawer.SVGCircuit at 0x107ab7580>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stp_for_test = ops_onehot(\n",
    "    ms.Tensor(best_candidates_history[-1]), shape_parametized + shape_unparameterized, ms.Tensor(1), ms.Tensor(0)\n",
    ")\n",
    "ansatz = mindspore_ansatz_micro_minipool(\n",
    "    structure_p=stp_for_test,\n",
    "    parameterized_pool=parameterized_circuit,\n",
    "    unparameterized_pool=unparameterized_circuit,\n",
    "    num_layer=num_layer,\n",
    "    n_qbits=8,\n",
    ")\n",
    "ansatz.svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dqas_tool import nnp_dealwith\n",
    "\n",
    "nnp = ansatz_params_history[-1]\n",
    "nnp_finnal = nnp_dealwith(structure_params=stp_for_test, network_params=nnp, shape_parameterized=shape_parametized)\n",
    "np.save('最终ansatz变分参数.npy', nnp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化训练过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAMWCAYAAAAH8wnbAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADMO0lEQVR4nOzdd3QV1d7G8e9JL6RAeiAQeicgJVRBjQIiSq9KUUSRomIDpSkqr2JBRUEQAS8dBERApAgoUkIv0ntNA5KQBNLOvH9EjkZagCQn5fmsNWvd7DPlN0NuzuOePXtMhmEYiIiIiMgd2Vi7ABEREZH8QsFJREREJIsUnERERESySMFJREREJIsUnERERESySMFJREREJIsUnERERESySMFJREREJIsUnERERESySMFJRKxu2rRpmEwmtm3bZu1S8pSTJ09iMpmYNm2atUsRkb8pOIkUMtdDyr8XX19fHnroIX755Zd73u+HH37I4sWLs6/QuzBq1ChMJhMxMTFWOX5W9erViyJFitzyc5PJxIABA+77ON98843ClkgOsbN2ASJiHe+99x6lS5fGMAwiIyOZNm0ajz/+OD///DNPPPHEXe/vww8/pEOHDrRp0yb7iy2kSpUqxdWrV7G3t7+r7b755hu8vb3p1atXzhQmUogpOIkUUi1btqROnTqWn5977jn8/PyYPXv2PQUnyX4mkwknJydrlwHAtWvXcHBwwMZGNyqkcNP/A0QEAE9PT5ydnbGzy/zfU5988gkNGzbEy8sLZ2dnateuzYIFCzKtYzKZSExMZPr06Zbbf//u7Th37hzPPfccgYGBODo6Urp0afr160dKSkqm/SQnJzN48GB8fHxwdXWlbdu2REdHZ9s5/vbbbzRp0gRXV1c8PT156qmnOHDgQKZ1rly5wiuvvEJwcDCOjo74+vry6KOPsmPHDss6R44coX379vj7++Pk5ESJEiXo0qULcXFx2VYr3HyMU0REBL1796ZEiRI4OjoSEBDAU089xcmTJwEIDg7mr7/+Yv369ZZ/i2bNmlm2P378OB07dqRYsWK4uLhQv359li1blum469atw2QyMWfOHIYNG0bx4sVxcXFh165dmEwmPv/88xtq3bhxIyaTidmzZ2frNRDJa9TjJFJIxcXFERMTg2EYREVF8dVXX5GQkMDTTz+dab0vvviCJ598ku7du5OSksKcOXPo2LEjS5cupVWrVgD873//o0+fPtSrV4++ffsCULZsWQDOnz9PvXr1iI2NpW/fvlSqVIlz586xYMECkpKScHBwsBxr4MCBFC1alJEjR3Ly5EnGjRvHgAEDmDt37n2f7+rVq2nZsiVlypRh1KhRXL16la+++opGjRqxY8cOgoODAXjxxRdZsGABAwYMoEqVKly8eJENGzZw4MABHnjgAVJSUmjevDnJyckMHDgQf39/zp07x9KlS4mNjcXDw+OOtdzPWKz27dvz119/MXDgQIKDg4mKimLVqlWcPn2a4OBgxo0bx8CBAylSpAjvvPMOAH5+fgBERkbSsGFDkpKSGDRoEF5eXkyfPp0nn3ySBQsW0LZt20zHGj16NA4ODrz++uskJydTqVIlGjVqxMyZM3n11VczrTtz5kzc3Nx46qmn7vncRPIFQ0QKlalTpxrADYujo6Mxbdq0G9ZPSkrK9HNKSopRrVo14+GHH87U7urqavTs2fOG7Xv06GHY2NgYW7duveEzs9mcqaawsDBLm2EYxquvvmrY2toasbGxtz2nkSNHGoARHR19y3Vq1qxp+Pr6GhcvXrS07d6927CxsTF69OhhafPw8DD69+9/y/3s3LnTAIz58+fftqab6dmz502v/b+Xfx/7xIkTBmBMnTrVMAzDuHz5sgEYY8eOve1xqlatajRt2vSG9ldeecUAjD/++MPSduXKFaN06dJGcHCwkZ6ebhiGYaxdu9YAjDJlytzw7//tt98agHHgwAFLW0pKiuHt7X3Tf3+Rgka36kQKqa+//ppVq1axatUqZsyYwUMPPUSfPn1YuHBhpvWcnZ0t//vy5cvExcXRpEmTTLeubsVsNrN48WJat26daTzVdSaTKdPPffv2zdTWpEkT0tPTOXXq1N2eXiYXLlxg165d9OrVi2LFilnaa9SowaOPPsry5cstbZ6enmzZsoXz58/fdF/Xe5R+/fVXkpKS7roWJycny3X/73Inzs7OODg4sG7dOi5fvnzXx16+fDn16tWjcePGlrYiRYrQt29fTp48yf79+zOt37Nnz0z//gCdOnXCycmJmTNnWtp+/fVXYmJibuitFCmIFJxECql69eoRFhZGWFgY3bt3Z9myZVSpUoUBAwZkGnu0dOlS6tevj5OTE8WKFcPHx4cJEyZkaTxPdHQ08fHxVKtWLUs1lSxZMtPPRYsWBbinkPBv14NXxYoVb/iscuXKxMTEkJiYCMDHH3/Mvn37CAoKol69eowaNYrjx49b1i9dujSDBw/mu+++w9vbm+bNm/P1119neXyTra2t5br/d7kTR0dHPvroI3755Rf8/Px48MEH+fjjj4mIiMjSsU+dOnXLa3D9838rXbr0Det6enrSunVrZs2aZWmbOXMmxYsX5+GHH85SHSL5mYKTiABgY2PDQw89xIULFzhy5AgAf/zxB08++SROTk588803LF++nFWrVtGtWzcMw8j2GmxtbW/anhPHupVOnTpx/PhxvvrqKwIDAxk7dixVq1bNNMfVp59+yp49e3j77be5evUqgwYNomrVqpw9ezbH63vllVc4fPgwY8aMwcnJieHDh1O5cmV27tyZ7cf6b2/TdT169OD48eNs3LiRK1eusGTJErp27aon7qRQ0G+5iFikpaUBkJCQAMCPP/6Ik5MTv/76K88++ywtW7a8Zc/If2+7Afj4+ODu7s6+fftyrugsKFWqFACHDh264bODBw/i7e2Nq6urpS0gIICXXnqJxYsXc+LECby8vPjggw8ybVe9enWGDRvG77//zh9//MG5c+eYOHFizp7I38qWLctrr73GypUr2bdvHykpKXz66aeWz2/2bwEZ1+FW1+D651nRokULfHx8mDlzJosWLSIpKYlnnnnmHs5EJP9RcBIRAFJTU1m5ciUODg6WWze2traYTCbS09Mt6508efKmM4S7uroSGxubqc3GxoY2bdrw888/3/R1KrnVkxQQEEDNmjWZPn16phr37dvHypUrefzxxwFIT0+/4Zabr68vgYGBJCcnAxAfH28JmNdVr14dGxsbyzo5JSkpiWvXrmVqK1u2LG5ubpmOfbN/C4DHH3+c8PBwNm3aZGlLTExk0qRJBAcHU6VKlSzVYWdnR9euXZk3bx7Tpk2jevXq1KhR495OSiSf0XQEIoXUL7/8YulpiIqKYtasWRw5coQhQ4bg7u4OQKtWrfjss89o0aIF3bp1Iyoqiq+//ppy5cqxZ8+eTPurXbs2q1ev5rPPPiMwMJDSpUsTGhrKhx9+yMqVK2natCl9+/alcuXKXLhwgfnz57NhwwY8PT2z7Zw+++wzXFxcMrXZ2Njw9ttvM3bsWFq2bEmDBg147rnnLNMReHh4MGrUKCBjDqcSJUrQoUMHQkJC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ZoKCghg4cCBDhgy54/bjxo1jxIgRXLhwAVdXVyCjxyk2NpbFixff28mhW3VyZ1dT0un23WZ2no6luKczi15qiK+7k7XLEhGR/8gTt+qaNm3K4cOHadu2LbGxscTGxtKuXTv++usv/ve//2VpHykpKWzfvp2wsLB/CraxISwsjE2bNmVpH1OmTKFLly6W0HTdunXr8PX1pWLFivTr14+LFy/edj/JycnEx8dnWkRux9nBlik961La25VzsVfpNXUrV65pgkwRkfwsV+Zx+rfdu3fzwAMPkJ6efsd1z58/T/Hixdm4caOl1wrgzTffZP369WzZsuW224eHhxMaGsqWLVuoV6+epX3OnDm4uLhQunRpjh07xttvv02RIkXYtGkTtrY3n7hw1KhRvPvuuze0q8dJ7uT0xSTaTfiTmIQUmpT3ZkrPujjY5dh/s4iIyF3KEz1OecGUKVOoXr16ptAE0KVLF5588kmqV69OmzZtWLp0KVu3bmXdunW33NfQoUOJi4uzLGfOnMnh6qWgKOnlwve96uLiYMsfR2IYsnAPufzfKyIikk3ydHDy9vbG1taWyMjITO2RkZH4+/vfdtvExETmzJnDc889d8fjlClTBm9vb44ePXrLdRwdHXF3d8+0iGRVjRKefN3tAWxtTCzccY5PVx62dkkiInIP8nRwcnBwoHbt2qxZs8bSZjabWbNmTaZbdzczf/58kpOTefrpp+94nLNnz3Lx4kUCAjTfjuSchyr58mHbagCMX3uUmVtOWbkiERG5W3bZvcN27drd9vPY2Ni72t/gwYPp2bMnderUoV69eowbN47ExER69+4NQI8ePShevDhjxozJtN2UKVNo06YNXl5emdoTEhJ49913ad++Pf7+/hw7dow333yTcuXK0bx587uqTeRuda5bkvOx1/hizRGGL96Hr5sTj1bxs3ZZIiKSRdkenDw8PO74eY8ePbK8v86dOxMdHc2IESOIiIigZs2arFixAj+/jC+b06dPY2OTuePs0KFDbNiwgZUrV96wP1tbW/bs2cP06dOJjY0lMDCQxx57jNGjR+Po6JjlukTu1Sth5YmIu8bcbWcYOHsHs56vzwMli1q7LBERyYJcf6quoNA8TnI/UtPNPP/DNtYdiqaYqwM/9mtIaW/XO28oIiLZTk/VieRx9rY2fN3tAaoX9+BSYgo9vw8nJiHZ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8eONihUrGhcuXHCuK2rn8bcAY8GCBddt8+qrrxoNGzZ0Wde7d28jKirKuXyrf2+FKT99zMs999xjjB492rk8atQoo2nTpgVXWAHKTx9XrVplAMYvv/xyzTZF9TzezDlcsGCB4eHhYRw+fNi5riifQ8MwjFOnThmAsWbNmmu2KSqfj7riVIgyMzPZunUrkZGRznWenp5ERkayYcOGPPfZsGGDS3uAqKgoZ/tDhw6RlJTk0sbX15fw8PBrvmdhupk+/t7FixfJysqiatWqLutXr16Nv78/9erVY+DAgZw9e7ZAa8+vm+3jhQsXCA0NJSQkhIcffpiffvrJua0knsfp06fzxBNPUKFCBZf1ReU83owb/T4WxN9bUeNwODh//nyu38f9+/cTFBRE7dq16dOnD4mJiRZVePOaNWuG3W6na9eurFu3zrm+pJ3H6dOnExkZSWhoqMv6onwOU1NTAXL93P1WUfl8VHAqRGfOnCE7O5uAgACX9QEBAbm+W/9VUlLSddv/+l933rMw3Uwff2/YsGEEBQW5/LDff//9/N///R9xcXG89957rFmzhu7du5OdnV2g9efHzfSxXr16zJgxg6+//ppPPvkEh8NB69atOXbsGFDyzuPmzZvZvXs3zz//vMv6onQeb8a1fh/T0tK4dOlSgfz8FzUffPABFy5c4PHHH3euCw8PZ9asWSxZsoTJkydz6NAh2rVrx/nz5y2sNP/sdjtTpkzhiy++4IsvviAkJISOHTuybds2oGD+HSsqTpw4wbfffpvrd7Eon0OHw8HLL79MmzZtaNSo0TXbFZXPRz3kVyz17rvvMnfuXFavXu0yePqJJ55w/rlx48Y0adKEu+66i9WrV9OlSxcrSnVLREQEERERzuXWrVvToEED/vd//5e3337bwsoKx/Tp02ncuDGtWrVyWV/cz2NpM3v2bEaPHs3XX3/tMv6ne/fuzj83adKE8PBwQkND+eyzz3juueesKNUt9erVo169es7l1q1bc+DAAcaPH89//vMfCysreB9//DGVK1emR48eLuuL8jmMiYlh9+7dlo65coeuOBUiPz8/vLy8SE5OdlmfnJxMYGBgnvsEBgZet/2v/3XnPQvTzfTxVx988AHvvvsuy5Yto0mTJtdtW7t2bfz8/EhISLjlmt11K338lbe3N82bN3fWX5LOY3p6OnPnzs3XP75Wnsebca3fx0qVKlGuXLkC+dkoKubOncvzzz/PZ599luvrkN+rXLkydevWLTbnMS+tWrVy1l9SzqNhGMyYMYOnn34aHx+f67YtKufwxRdf5L///S+rVq3izjvvvG7bovL5qOBUiHx8fAgLCyMuLs65zuFwEBcX53I14rciIiJc2gMsX77c2b5WrVoEBga6tElLS2PTpk3XfM/CdDN9BPPOh7fffpslS5bQokWLGx7n2LFjnD17FrvdXiB1u+Nm+/hb2dnZ7Nq1y1l/STmPYN4enJGRwVNPPXXD41h5Hm/GjX4fC+JnoyiYM2cO/fr1Y86cOS7TSVzLhQsXOHDgQLE5j3nZsWOHs/6Sch7XrFlDQkJCvv4nxupzaBgGL774IgsWLGDlypXUqlXrhvsUmc/HAhtmLnmaO3euYbPZjFmzZhk///yzMWDAAKNy5cpGUlKSYRiG8fTTTxvDhw93tl+3bp1RpkwZ44MPPjD27NljjBo1yvD29jZ27drlbPPuu+8alStXNr7++mtj586dxsMPP2zUqlXLuHTp0m3vn2G438d3333X8PHxMebPn2+cPHnS+Tp//rxhGIZx/vx545VXXjE2bNhgHDp0yFixYoVx7733GnXq1DEuX75cLPo4evRoY+nSpcaBAweMrVu3Gk888YRRtmxZ46effnK2Ke7n8Vdt27Y1evfunWt9UTyP58+fN7Zv325s377dAIwPP/zQ2L59u3HkyBHDMAxj+PDhxtNPP+1sf/DgQaN8+fLGX//6V2PPnj3GpEmTDC8vL2PJkiXONjf6e7vd3O3jp59+apQpU8aYNGmSy+9jSkqKs81f/vIXY/Xq1cahQ4eMdevWGZGRkYafn59x6tSp294/w3C/j+PHjze++uorY//+/cauXbuMIUOGGJ6ensaKFSucbYrSeXS3f7966qmnjPDw8Dzfs6idw4EDBxq+vr7G6tWrXX7uLl686GxTVD8fFZxug48++sioUaOG4ePjY7Rq1crYuHGjc1uHDh2M6Ohol/afffaZUbduXcPHx8do2LChsWjRIpftDofDeOONN4yAgADDZrMZXbp0MeLj429HV67JnT6GhoYaQK7XqFGjDMMwjIsXLxrdunUzqlevbnh7exuhoaFG//79Lfsg+pU7fXz55ZedbQMCAowHHnjA2LZtm8v7FffzaBiGsXfvXgMwli1bluu9iuJ5/PW29N+/fu1XdHS00aFDh1z7NGvWzPDx8TFq165tzJw5M9f7Xu/v7XZzt48dOnS4bnvDMKdgsNvtho+PjxEcHGz07t3bSEhIuL0d+w13+/jee+8Zd911l1G2bFmjatWqRseOHY2VK1fmet+ich5v5uc0JSXFKFeunDF16tQ837OoncO8+ge4/H4V1c9Hj6sdEBEREZEb0BgnERERkXxScBIRERHJJwUnERERkXxScBIRERHJJwUnERERkXxScBIRERHJJwUnERERkXxScBIRERHJJwUnEZFC4OHhwVdffWV1GSJSwBScRKTEeeaZZ/Dw8Mj1uv/++60uTUSKuTJWFyAiUhjuv/9+Zs6c6bLOZrNZVI2IlBS64iQiJZLNZiMwMNDlVaVKFcD8Gm3y5Ml0796dcuXKUbt2bebPn++y/65du+jcuTPlypWjWrVqDBgwgAsXLri0mTFjBg0bNsRms2G323nxxRddtp85c4ZHHnmE8uXLU6dOHRYuXFi4nRaRQqfgJCKl0htvvEHPnj358ccf6dOnD0888QR79uwBID09naioKKpUqcKWLVv4/PPPWbFihUswmjx5MjExMQwYMIBdu3axcOFC7r77bpdjjB49mscff5ydO3fywAMP0KdPH86dO3db+ykiBcwQESlhoqOjDS8vL6NChQour7///e+GYRgGYLzwwgsu+4SHhxsDBw40DMMwpk6dalSpUsW4cOGCc/uiRYsMT09PIykpyTAMwwgKCjL+9re/XbMGwHj99dedyxcuXDAA49tvvy2wforI7acxTiJSInXq1InJkye7rKtatarzzxERES7bIiIi2LFjBwB79uyhadOmVKhQwbm9TZs2OBwO4uPj8fDw4MSJE3Tp0uW6NTRp0sT55woVKlCpUiVOnTp1s10SkSJAwUlESqQKFSrk+uqsoJQrVy5f7by9vV2WPTw8cDgchVGSiNwmGuMkIqXSxo0bcy03aNAAgAYNGvDjjz+Snp7u3L5u3To8PT2pV68eFStWpGbNmsTFxd3WmkXEerriJCIlUkZGBklJSS7rypQpg5+fHwCff/45LVq0oG3btnz66ads3ryZ6dOnA9CnTx9GjRpFdHQ0b775JqdPn+all17i6aefJiAgAIA333yTF154AX9/f7p378758+dZt24dL7300u3tqIjcVgpOIlIiLVmyBLvd7rKuXr167N27FzDveJs7dy6DBg3CbrczZ84c7rnnHgDKly/P0qVLGTJkCC1btqR8+fL07NmTDz/80Ple0dHRXL58mfHjx/PKK6/g5+fHY489dvs6KCKW8DAMw7C6CBGR28nDw4MFCxbQo0cPq0sRkWJGY5xERERE8knBSURERCSfNMZJREodjVAQkZulK04iIiIi+aTgJCIiIpJPCk4iIiIi+aTgJCIiIpJPCk4iIiIi+aTgJCIiIpJPCk4iIiIi+aTgJCIiIpJPCk4iIiIi+fT/4Kw2dKqL8rsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 600x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6, 8))\n",
    "# 绘制第一个子图\n",
    "ax1.plot(range(len(batch_loss_history)), batch_loss_history, label='Batch Loss History')\n",
    "ax1.set_title('Batch Loss History')\n",
    "ax1.set_xlabel('Epoch')\n",
    "ax1.set_ylabel('Loss')\n",
    "ax1.legend()\n",
    "# ax1.grid(True)\n",
    "\n",
    "# 绘制第二个子图\n",
    "ax2.plot(range(len(acc_history)), acc_history, label='Accuracy History', color='orange')\n",
    "ax2.set_title('Accuracy History')\n",
    "ax2.set_xlabel('Epoch')\n",
    "ax2.set_ylabel('Accuracy')\n",
    "ax2.legend()\n",
    "# ax2.grid(True)\n",
    "\n",
    "# 调整布局\n",
    "plt.tight_layout()\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "在完整的数据集(11446)上的精度为:72.17196447837995%\n"
     ]
    }
   ],
   "source": [
    "from data_preprocessing import x_fulldata, y_fulldata\n",
    "\n",
    "# type(y_fulldata) # <class 'numpy.ndarray'>\n",
    "acc = dqas_accuracy_custom(ansatz=ansatz, network_params=nnp_finnal, x=x_fulldata, y=y_fulldata, n_qbits=8)\n",
    "print(f'在完整的数据集(11446)上的精度为:{acc*100}%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最终在完整数据集上的精度为 97.4%+ 经过进一步微调可以更高 已经达到验收要求！"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MindSpore",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
